/*
	ACDM_mod.h

	contains the kernel module functionality entry points for the ACDM

	Author: Aidan Goddard 1/11/13
*/

#ifndef ACDM_MOD_H_INCLUDED
#define ACDM_MOD_H_INCLUDED

// internal queue things
uint32_t ACDMGetQueueLength(void);
uint32_t ACDMReadMessage(uint8_t *dest_buffer);

// window allocation & deallocation
HWND ACDMCreateStaticWindow(uint64_t PID, char *window_name, int name_count);
void ACDMDestroyWindow(HWND hwnd);
void ACDMDestroyWindowsForProc(uint64_t PID);

// window control functions
void ACDMWindowHide(HWND hwnd);
void ACDMWindowShow(HWND hwnd);
void ACDMWindowUpdate(HWND hwnd);
void ACDMWindowChangeName(HWND hwnd, char *window_name, int name_count);
void ACDMWindowWaitForFocus(HWND hwnd);
uint64_t ACDMWindowGetBufferAddress(HWND hwnd);
void ACDMGetWindowsForProc(uint64_t PID, HWND *windows, uint32_t *total_windows);

// keyboard access functions
uint8_t ACDMWindowWaitForChar(HWND hwnd);
void ACDMWindowClearChar(HWND hwnd);
void ACDMWindowGetKeystate(HWND hwnd, uint8_t *keystate);

// other functions (system only)
void ACDMLogin(void);
void ACDMGiveFocus(HWND hwnd);

// system logging functions
void ACDMPrintLog(char *string, int string_length);

#endif
